(0) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
getNodeFromEdge(S(S(x')), E(x, y)) → y
via(u, v, Cons(E(x, y), xs), edges) → via[Ite](!EQ(u, x), u, v, Cons(E(x, y), xs), edges)
getNodeFromEdge(S(0), E(x, y)) → x
member(x', Cons(x, xs)) → member[Ite](eqEdge(x', x), x', Cons(x, xs))
getNodeFromEdge(0, E(x, y)) → x
eqEdge(E(e11, e12), E(e21, e22)) → eqEdge[Ite](and(!EQ(e11, e21), !EQ(e12, e22)), e21, e22, e11, e12)
via(u, v, Nil, edges) → Nil
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
member(x, Nil) → False
reach(u, v, edges) → reach[Ite](member(E(u, v), edges), u, v, edges)
goal(u, v, edges) → reach(u, v, edges)
The (relative) TRS S consists of the following rules:
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0, S(y)) → False
!EQ(S(x), 0) → False
!EQ(0, 0) → True
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
via[Ite](True, u, v, Cons(E(x, y), xs), edges) → via[Let](u, v, Cons(E(x, y), xs), edges, reach(y, v, edges))
via[Let](u, v, Cons(x, xs), edges, Nil) → via(u, v, xs, edges)
via[Let](u, v, Cons(x, xs), edges, Cons(x', xs')) → Cons(x, Cons(x', xs'))
via[Ite](False, u, v, Cons(x, xs), edges) → via(u, v, xs, edges)
member[Ite](False, x', Cons(x, xs)) → member(x', xs)
reach[Ite](False, u, v, edges) → via(u, v, edges, edges)
reach[Ite](True, u, v, edges) → Cons(E(u, v), Nil)
member[Ite](True, x, xs) → True
eqEdge[Ite](False, e21, e22, e11, e12) → False
eqEdge[Ite](True, e21, e22, e11, e12) → True
Rewrite Strategy: INNERMOST
(1) RenamingProof (EQUIVALENT transformation)
Renamed function symbols to avoid clashes with predefined symbol.
(2) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
getNodeFromEdge(S(S(x')), E(x, y)) → y
via(u, v, Cons(E(x, y), xs), edges) → via[Ite](!EQ(u, x), u, v, Cons(E(x, y), xs), edges)
getNodeFromEdge(S(0'), E(x, y)) → x
member(x', Cons(x, xs)) → member[Ite](eqEdge(x', x), x', Cons(x, xs))
getNodeFromEdge(0', E(x, y)) → x
eqEdge(E(e11, e12), E(e21, e22)) → eqEdge[Ite](and(!EQ(e11, e21), !EQ(e12, e22)), e21, e22, e11, e12)
via(u, v, Nil, edges) → Nil
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
member(x, Nil) → False
reach(u, v, edges) → reach[Ite](member(E(u, v), edges), u, v, edges)
goal(u, v, edges) → reach(u, v, edges)
The (relative) TRS S consists of the following rules:
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0', S(y)) → False
!EQ(S(x), 0') → False
!EQ(0', 0') → True
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
via[Ite](True, u, v, Cons(E(x, y), xs), edges) → via[Let](u, v, Cons(E(x, y), xs), edges, reach(y, v, edges))
via[Let](u, v, Cons(x, xs), edges, Nil) → via(u, v, xs, edges)
via[Let](u, v, Cons(x, xs), edges, Cons(x', xs')) → Cons(x, Cons(x', xs'))
via[Ite](False, u, v, Cons(x, xs), edges) → via(u, v, xs, edges)
member[Ite](False, x', Cons(x, xs)) → member(x', xs)
reach[Ite](False, u, v, edges) → via(u, v, edges, edges)
reach[Ite](True, u, v, edges) → Cons(E(u, v), Nil)
member[Ite](True, x, xs) → True
eqEdge[Ite](False, e21, e22, e11, e12) → False
eqEdge[Ite](True, e21, e22, e11, e12) → True
Rewrite Strategy: INNERMOST
(3) SlicingProof (LOWER BOUND(ID) transformation)
Sliced the following arguments:
eqEdge[Ite]/1
eqEdge[Ite]/2
eqEdge[Ite]/3
eqEdge[Ite]/4
(4) Obligation:
Runtime Complexity Relative TRS:
The TRS R consists of the following rules:
getNodeFromEdge(S(S(x')), E(x, y)) → y
via(u, v, Cons(E(x, y), xs), edges) → via[Ite](!EQ(u, x), u, v, Cons(E(x, y), xs), edges)
getNodeFromEdge(S(0'), E(x, y)) → x
member(x', Cons(x, xs)) → member[Ite](eqEdge(x', x), x', Cons(x, xs))
getNodeFromEdge(0', E(x, y)) → x
eqEdge(E(e11, e12), E(e21, e22)) → eqEdge[Ite](and(!EQ(e11, e21), !EQ(e12, e22)))
via(u, v, Nil, edges) → Nil
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
member(x, Nil) → False
reach(u, v, edges) → reach[Ite](member(E(u, v), edges), u, v, edges)
goal(u, v, edges) → reach(u, v, edges)
The (relative) TRS S consists of the following rules:
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0', S(y)) → False
!EQ(S(x), 0') → False
!EQ(0', 0') → True
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
via[Ite](True, u, v, Cons(E(x, y), xs), edges) → via[Let](u, v, Cons(E(x, y), xs), edges, reach(y, v, edges))
via[Let](u, v, Cons(x, xs), edges, Nil) → via(u, v, xs, edges)
via[Let](u, v, Cons(x, xs), edges, Cons(x', xs')) → Cons(x, Cons(x', xs'))
via[Ite](False, u, v, Cons(x, xs), edges) → via(u, v, xs, edges)
member[Ite](False, x', Cons(x, xs)) → member(x', xs)
reach[Ite](False, u, v, edges) → via(u, v, edges, edges)
reach[Ite](True, u, v, edges) → Cons(E(u, v), Nil)
member[Ite](True, x, xs) → True
eqEdge[Ite](False) → False
eqEdge[Ite](True) → True
Rewrite Strategy: INNERMOST
(5) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)
Infered types.
(6) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(S(S(x')), E(x, y)) → y
via(u, v, Cons(E(x, y), xs), edges) → via[Ite](!EQ(u, x), u, v, Cons(E(x, y), xs), edges)
getNodeFromEdge(S(0'), E(x, y)) → x
member(x', Cons(x, xs)) → member[Ite](eqEdge(x', x), x', Cons(x, xs))
getNodeFromEdge(0', E(x, y)) → x
eqEdge(E(e11, e12), E(e21, e22)) → eqEdge[Ite](and(!EQ(e11, e21), !EQ(e12, e22)))
via(u, v, Nil, edges) → Nil
notEmpty(Cons(x, xs)) → True
notEmpty(Nil) → False
member(x, Nil) → False
reach(u, v, edges) → reach[Ite](member(E(u, v), edges), u, v, edges)
goal(u, v, edges) → reach(u, v, edges)
!EQ(S(x), S(y)) → !EQ(x, y)
!EQ(0', S(y)) → False
!EQ(S(x), 0') → False
!EQ(0', 0') → True
and(False, False) → False
and(True, False) → False
and(False, True) → False
and(True, True) → True
via[Ite](True, u, v, Cons(E(x, y), xs), edges) → via[Let](u, v, Cons(E(x, y), xs), edges, reach(y, v, edges))
via[Let](u, v, Cons(x, xs), edges, Nil) → via(u, v, xs, edges)
via[Let](u, v, Cons(x, xs), edges, Cons(x', xs')) → Cons(x, Cons(x', xs'))
via[Ite](False, u, v, Cons(x, xs), edges) → via(u, v, xs, edges)
member[Ite](False, x', Cons(x, xs)) → member(x', xs)
reach[Ite](False, u, v, edges) → via(u, v, edges, edges)
reach[Ite](True, u, v, edges) → Cons(E(u, v), Nil)
member[Ite](True, x, xs) → True
eqEdge[Ite](False) → False
eqEdge[Ite](True) → True
Types:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
(7) OrderProof (LOWER BOUND(ID) transformation)
Heuristically decided to analyse the following defined symbols:
via,
!EQ,
member,
reachThey will be analysed ascendingly in the following order:
!EQ < via
via = reach
member < reach
(8) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(
S(
S(
x')),
E(
x,
y)) →
yvia(
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Ite](
!EQ(
u,
x),
u,
v,
Cons(
E(
x,
y),
xs),
edges)
getNodeFromEdge(
S(
0'),
E(
x,
y)) →
xmember(
x',
Cons(
x,
xs)) →
member[Ite](
eqEdge(
x',
x),
x',
Cons(
x,
xs))
getNodeFromEdge(
0',
E(
x,
y)) →
xeqEdge(
E(
e11,
e12),
E(
e21,
e22)) →
eqEdge[Ite](
and(
!EQ(
e11,
e21),
!EQ(
e12,
e22)))
via(
u,
v,
Nil,
edges) →
NilnotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsemember(
x,
Nil) →
Falsereach(
u,
v,
edges) →
reach[Ite](
member(
E(
u,
v),
edges),
u,
v,
edges)
goal(
u,
v,
edges) →
reach(
u,
v,
edges)
!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Trueand(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
Truevia[Ite](
True,
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Let](
u,
v,
Cons(
E(
x,
y),
xs),
edges,
reach(
y,
v,
edges))
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Nil) →
via(
u,
v,
xs,
edges)
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Cons(
x',
xs')) →
Cons(
x,
Cons(
x',
xs'))
via[Ite](
False,
u,
v,
Cons(
x,
xs),
edges) →
via(
u,
v,
xs,
edges)
member[Ite](
False,
x',
Cons(
x,
xs)) →
member(
x',
xs)
reach[Ite](
False,
u,
v,
edges) →
via(
u,
v,
edges,
edges)
reach[Ite](
True,
u,
v,
edges) →
Cons(
E(
u,
v),
Nil)
member[Ite](
True,
x,
xs) →
TrueeqEdge[Ite](
False) →
FalseeqEdge[Ite](
True) →
TrueTypes:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
Generator Equations:
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))
gen_Cons:Nil6_0(0) ⇔ Nil
gen_Cons:Nil6_0(+(x, 1)) ⇔ Cons(E(0', 0'), gen_Cons:Nil6_0(x))
The following defined symbols remain to be analysed:
!EQ, via, member, reach
They will be analysed ascendingly in the following order:
!EQ < via
via = reach
member < reach
(9) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
!EQ(
gen_S:0'5_0(
n8_0),
gen_S:0'5_0(
+(
1,
n8_0))) →
False, rt ∈ Ω(0)
Induction Base:
!EQ(gen_S:0'5_0(0), gen_S:0'5_0(+(1, 0))) →RΩ(0)
False
Induction Step:
!EQ(gen_S:0'5_0(+(n8_0, 1)), gen_S:0'5_0(+(1, +(n8_0, 1)))) →RΩ(0)
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) →IH
False
We have rt ∈ Ω(1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n0).
(10) Complex Obligation (BEST)
(11) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(
S(
S(
x')),
E(
x,
y)) →
yvia(
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Ite](
!EQ(
u,
x),
u,
v,
Cons(
E(
x,
y),
xs),
edges)
getNodeFromEdge(
S(
0'),
E(
x,
y)) →
xmember(
x',
Cons(
x,
xs)) →
member[Ite](
eqEdge(
x',
x),
x',
Cons(
x,
xs))
getNodeFromEdge(
0',
E(
x,
y)) →
xeqEdge(
E(
e11,
e12),
E(
e21,
e22)) →
eqEdge[Ite](
and(
!EQ(
e11,
e21),
!EQ(
e12,
e22)))
via(
u,
v,
Nil,
edges) →
NilnotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsemember(
x,
Nil) →
Falsereach(
u,
v,
edges) →
reach[Ite](
member(
E(
u,
v),
edges),
u,
v,
edges)
goal(
u,
v,
edges) →
reach(
u,
v,
edges)
!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Trueand(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
Truevia[Ite](
True,
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Let](
u,
v,
Cons(
E(
x,
y),
xs),
edges,
reach(
y,
v,
edges))
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Nil) →
via(
u,
v,
xs,
edges)
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Cons(
x',
xs')) →
Cons(
x,
Cons(
x',
xs'))
via[Ite](
False,
u,
v,
Cons(
x,
xs),
edges) →
via(
u,
v,
xs,
edges)
member[Ite](
False,
x',
Cons(
x,
xs)) →
member(
x',
xs)
reach[Ite](
False,
u,
v,
edges) →
via(
u,
v,
edges,
edges)
reach[Ite](
True,
u,
v,
edges) →
Cons(
E(
u,
v),
Nil)
member[Ite](
True,
x,
xs) →
TrueeqEdge[Ite](
False) →
FalseeqEdge[Ite](
True) →
TrueTypes:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
Lemmas:
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) → False, rt ∈ Ω(0)
Generator Equations:
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))
gen_Cons:Nil6_0(0) ⇔ Nil
gen_Cons:Nil6_0(+(x, 1)) ⇔ Cons(E(0', 0'), gen_Cons:Nil6_0(x))
The following defined symbols remain to be analysed:
member, via, reach
They will be analysed ascendingly in the following order:
via = reach
member < reach
(12) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol member.
(13) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(
S(
S(
x')),
E(
x,
y)) →
yvia(
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Ite](
!EQ(
u,
x),
u,
v,
Cons(
E(
x,
y),
xs),
edges)
getNodeFromEdge(
S(
0'),
E(
x,
y)) →
xmember(
x',
Cons(
x,
xs)) →
member[Ite](
eqEdge(
x',
x),
x',
Cons(
x,
xs))
getNodeFromEdge(
0',
E(
x,
y)) →
xeqEdge(
E(
e11,
e12),
E(
e21,
e22)) →
eqEdge[Ite](
and(
!EQ(
e11,
e21),
!EQ(
e12,
e22)))
via(
u,
v,
Nil,
edges) →
NilnotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsemember(
x,
Nil) →
Falsereach(
u,
v,
edges) →
reach[Ite](
member(
E(
u,
v),
edges),
u,
v,
edges)
goal(
u,
v,
edges) →
reach(
u,
v,
edges)
!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Trueand(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
Truevia[Ite](
True,
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Let](
u,
v,
Cons(
E(
x,
y),
xs),
edges,
reach(
y,
v,
edges))
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Nil) →
via(
u,
v,
xs,
edges)
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Cons(
x',
xs')) →
Cons(
x,
Cons(
x',
xs'))
via[Ite](
False,
u,
v,
Cons(
x,
xs),
edges) →
via(
u,
v,
xs,
edges)
member[Ite](
False,
x',
Cons(
x,
xs)) →
member(
x',
xs)
reach[Ite](
False,
u,
v,
edges) →
via(
u,
v,
edges,
edges)
reach[Ite](
True,
u,
v,
edges) →
Cons(
E(
u,
v),
Nil)
member[Ite](
True,
x,
xs) →
TrueeqEdge[Ite](
False) →
FalseeqEdge[Ite](
True) →
TrueTypes:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
Lemmas:
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) → False, rt ∈ Ω(0)
Generator Equations:
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))
gen_Cons:Nil6_0(0) ⇔ Nil
gen_Cons:Nil6_0(+(x, 1)) ⇔ Cons(E(0', 0'), gen_Cons:Nil6_0(x))
The following defined symbols remain to be analysed:
reach, via
They will be analysed ascendingly in the following order:
via = reach
(14) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol reach.
(15) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(
S(
S(
x')),
E(
x,
y)) →
yvia(
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Ite](
!EQ(
u,
x),
u,
v,
Cons(
E(
x,
y),
xs),
edges)
getNodeFromEdge(
S(
0'),
E(
x,
y)) →
xmember(
x',
Cons(
x,
xs)) →
member[Ite](
eqEdge(
x',
x),
x',
Cons(
x,
xs))
getNodeFromEdge(
0',
E(
x,
y)) →
xeqEdge(
E(
e11,
e12),
E(
e21,
e22)) →
eqEdge[Ite](
and(
!EQ(
e11,
e21),
!EQ(
e12,
e22)))
via(
u,
v,
Nil,
edges) →
NilnotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsemember(
x,
Nil) →
Falsereach(
u,
v,
edges) →
reach[Ite](
member(
E(
u,
v),
edges),
u,
v,
edges)
goal(
u,
v,
edges) →
reach(
u,
v,
edges)
!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Trueand(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
Truevia[Ite](
True,
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Let](
u,
v,
Cons(
E(
x,
y),
xs),
edges,
reach(
y,
v,
edges))
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Nil) →
via(
u,
v,
xs,
edges)
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Cons(
x',
xs')) →
Cons(
x,
Cons(
x',
xs'))
via[Ite](
False,
u,
v,
Cons(
x,
xs),
edges) →
via(
u,
v,
xs,
edges)
member[Ite](
False,
x',
Cons(
x,
xs)) →
member(
x',
xs)
reach[Ite](
False,
u,
v,
edges) →
via(
u,
v,
edges,
edges)
reach[Ite](
True,
u,
v,
edges) →
Cons(
E(
u,
v),
Nil)
member[Ite](
True,
x,
xs) →
TrueeqEdge[Ite](
False) →
FalseeqEdge[Ite](
True) →
TrueTypes:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
Lemmas:
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) → False, rt ∈ Ω(0)
Generator Equations:
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))
gen_Cons:Nil6_0(0) ⇔ Nil
gen_Cons:Nil6_0(+(x, 1)) ⇔ Cons(E(0', 0'), gen_Cons:Nil6_0(x))
The following defined symbols remain to be analysed:
via
They will be analysed ascendingly in the following order:
via = reach
(16) RewriteLemmaProof (LOWER BOUND(ID) transformation)
Proved the following rewrite lemma:
via(
gen_S:0'5_0(
1),
gen_S:0'5_0(
b),
gen_Cons:Nil6_0(
n4371_0),
gen_Cons:Nil6_0(
d)) →
gen_Cons:Nil6_0(
0), rt ∈ Ω(1 + n4371
0)
Induction Base:
via(gen_S:0'5_0(1), gen_S:0'5_0(b), gen_Cons:Nil6_0(0), gen_Cons:Nil6_0(d)) →RΩ(1)
Nil
Induction Step:
via(gen_S:0'5_0(1), gen_S:0'5_0(b), gen_Cons:Nil6_0(+(n4371_0, 1)), gen_Cons:Nil6_0(d)) →RΩ(1)
via[Ite](!EQ(gen_S:0'5_0(1), 0'), gen_S:0'5_0(1), gen_S:0'5_0(b), Cons(E(0', 0'), gen_Cons:Nil6_0(n4371_0)), gen_Cons:Nil6_0(d)) →RΩ(0)
via[Ite](False, gen_S:0'5_0(1), gen_S:0'5_0(b), Cons(E(0', 0'), gen_Cons:Nil6_0(n4371_0)), gen_Cons:Nil6_0(d)) →RΩ(0)
via(gen_S:0'5_0(1), gen_S:0'5_0(b), gen_Cons:Nil6_0(n4371_0), gen_Cons:Nil6_0(d)) →IH
gen_Cons:Nil6_0(0)
We have rt ∈ Ω(n1) and sz ∈ O(n). Thus, we have ircR ∈ Ω(n).
(17) Complex Obligation (BEST)
(18) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(
S(
S(
x')),
E(
x,
y)) →
yvia(
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Ite](
!EQ(
u,
x),
u,
v,
Cons(
E(
x,
y),
xs),
edges)
getNodeFromEdge(
S(
0'),
E(
x,
y)) →
xmember(
x',
Cons(
x,
xs)) →
member[Ite](
eqEdge(
x',
x),
x',
Cons(
x,
xs))
getNodeFromEdge(
0',
E(
x,
y)) →
xeqEdge(
E(
e11,
e12),
E(
e21,
e22)) →
eqEdge[Ite](
and(
!EQ(
e11,
e21),
!EQ(
e12,
e22)))
via(
u,
v,
Nil,
edges) →
NilnotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsemember(
x,
Nil) →
Falsereach(
u,
v,
edges) →
reach[Ite](
member(
E(
u,
v),
edges),
u,
v,
edges)
goal(
u,
v,
edges) →
reach(
u,
v,
edges)
!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Trueand(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
Truevia[Ite](
True,
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Let](
u,
v,
Cons(
E(
x,
y),
xs),
edges,
reach(
y,
v,
edges))
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Nil) →
via(
u,
v,
xs,
edges)
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Cons(
x',
xs')) →
Cons(
x,
Cons(
x',
xs'))
via[Ite](
False,
u,
v,
Cons(
x,
xs),
edges) →
via(
u,
v,
xs,
edges)
member[Ite](
False,
x',
Cons(
x,
xs)) →
member(
x',
xs)
reach[Ite](
False,
u,
v,
edges) →
via(
u,
v,
edges,
edges)
reach[Ite](
True,
u,
v,
edges) →
Cons(
E(
u,
v),
Nil)
member[Ite](
True,
x,
xs) →
TrueeqEdge[Ite](
False) →
FalseeqEdge[Ite](
True) →
TrueTypes:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
Lemmas:
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) → False, rt ∈ Ω(0)
via(gen_S:0'5_0(1), gen_S:0'5_0(b), gen_Cons:Nil6_0(n4371_0), gen_Cons:Nil6_0(d)) → gen_Cons:Nil6_0(0), rt ∈ Ω(1 + n43710)
Generator Equations:
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))
gen_Cons:Nil6_0(0) ⇔ Nil
gen_Cons:Nil6_0(+(x, 1)) ⇔ Cons(E(0', 0'), gen_Cons:Nil6_0(x))
The following defined symbols remain to be analysed:
reach
They will be analysed ascendingly in the following order:
via = reach
(19) NoRewriteLemmaProof (LOWER BOUND(ID) transformation)
Could not prove a rewrite lemma for the defined symbol reach.
(20) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(
S(
S(
x')),
E(
x,
y)) →
yvia(
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Ite](
!EQ(
u,
x),
u,
v,
Cons(
E(
x,
y),
xs),
edges)
getNodeFromEdge(
S(
0'),
E(
x,
y)) →
xmember(
x',
Cons(
x,
xs)) →
member[Ite](
eqEdge(
x',
x),
x',
Cons(
x,
xs))
getNodeFromEdge(
0',
E(
x,
y)) →
xeqEdge(
E(
e11,
e12),
E(
e21,
e22)) →
eqEdge[Ite](
and(
!EQ(
e11,
e21),
!EQ(
e12,
e22)))
via(
u,
v,
Nil,
edges) →
NilnotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsemember(
x,
Nil) →
Falsereach(
u,
v,
edges) →
reach[Ite](
member(
E(
u,
v),
edges),
u,
v,
edges)
goal(
u,
v,
edges) →
reach(
u,
v,
edges)
!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Trueand(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
Truevia[Ite](
True,
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Let](
u,
v,
Cons(
E(
x,
y),
xs),
edges,
reach(
y,
v,
edges))
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Nil) →
via(
u,
v,
xs,
edges)
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Cons(
x',
xs')) →
Cons(
x,
Cons(
x',
xs'))
via[Ite](
False,
u,
v,
Cons(
x,
xs),
edges) →
via(
u,
v,
xs,
edges)
member[Ite](
False,
x',
Cons(
x,
xs)) →
member(
x',
xs)
reach[Ite](
False,
u,
v,
edges) →
via(
u,
v,
edges,
edges)
reach[Ite](
True,
u,
v,
edges) →
Cons(
E(
u,
v),
Nil)
member[Ite](
True,
x,
xs) →
TrueeqEdge[Ite](
False) →
FalseeqEdge[Ite](
True) →
TrueTypes:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
Lemmas:
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) → False, rt ∈ Ω(0)
via(gen_S:0'5_0(1), gen_S:0'5_0(b), gen_Cons:Nil6_0(n4371_0), gen_Cons:Nil6_0(d)) → gen_Cons:Nil6_0(0), rt ∈ Ω(1 + n43710)
Generator Equations:
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))
gen_Cons:Nil6_0(0) ⇔ Nil
gen_Cons:Nil6_0(+(x, 1)) ⇔ Cons(E(0', 0'), gen_Cons:Nil6_0(x))
No more defined symbols left to analyse.
(21) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
via(gen_S:0'5_0(1), gen_S:0'5_0(b), gen_Cons:Nil6_0(n4371_0), gen_Cons:Nil6_0(d)) → gen_Cons:Nil6_0(0), rt ∈ Ω(1 + n43710)
(22) BOUNDS(n^1, INF)
(23) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(
S(
S(
x')),
E(
x,
y)) →
yvia(
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Ite](
!EQ(
u,
x),
u,
v,
Cons(
E(
x,
y),
xs),
edges)
getNodeFromEdge(
S(
0'),
E(
x,
y)) →
xmember(
x',
Cons(
x,
xs)) →
member[Ite](
eqEdge(
x',
x),
x',
Cons(
x,
xs))
getNodeFromEdge(
0',
E(
x,
y)) →
xeqEdge(
E(
e11,
e12),
E(
e21,
e22)) →
eqEdge[Ite](
and(
!EQ(
e11,
e21),
!EQ(
e12,
e22)))
via(
u,
v,
Nil,
edges) →
NilnotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsemember(
x,
Nil) →
Falsereach(
u,
v,
edges) →
reach[Ite](
member(
E(
u,
v),
edges),
u,
v,
edges)
goal(
u,
v,
edges) →
reach(
u,
v,
edges)
!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Trueand(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
Truevia[Ite](
True,
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Let](
u,
v,
Cons(
E(
x,
y),
xs),
edges,
reach(
y,
v,
edges))
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Nil) →
via(
u,
v,
xs,
edges)
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Cons(
x',
xs')) →
Cons(
x,
Cons(
x',
xs'))
via[Ite](
False,
u,
v,
Cons(
x,
xs),
edges) →
via(
u,
v,
xs,
edges)
member[Ite](
False,
x',
Cons(
x,
xs)) →
member(
x',
xs)
reach[Ite](
False,
u,
v,
edges) →
via(
u,
v,
edges,
edges)
reach[Ite](
True,
u,
v,
edges) →
Cons(
E(
u,
v),
Nil)
member[Ite](
True,
x,
xs) →
TrueeqEdge[Ite](
False) →
FalseeqEdge[Ite](
True) →
TrueTypes:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
Lemmas:
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) → False, rt ∈ Ω(0)
via(gen_S:0'5_0(1), gen_S:0'5_0(b), gen_Cons:Nil6_0(n4371_0), gen_Cons:Nil6_0(d)) → gen_Cons:Nil6_0(0), rt ∈ Ω(1 + n43710)
Generator Equations:
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))
gen_Cons:Nil6_0(0) ⇔ Nil
gen_Cons:Nil6_0(+(x, 1)) ⇔ Cons(E(0', 0'), gen_Cons:Nil6_0(x))
No more defined symbols left to analyse.
(24) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(n1) was proven with the following lemma:
via(gen_S:0'5_0(1), gen_S:0'5_0(b), gen_Cons:Nil6_0(n4371_0), gen_Cons:Nil6_0(d)) → gen_Cons:Nil6_0(0), rt ∈ Ω(1 + n43710)
(25) BOUNDS(n^1, INF)
(26) Obligation:
Innermost TRS:
Rules:
getNodeFromEdge(
S(
S(
x')),
E(
x,
y)) →
yvia(
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Ite](
!EQ(
u,
x),
u,
v,
Cons(
E(
x,
y),
xs),
edges)
getNodeFromEdge(
S(
0'),
E(
x,
y)) →
xmember(
x',
Cons(
x,
xs)) →
member[Ite](
eqEdge(
x',
x),
x',
Cons(
x,
xs))
getNodeFromEdge(
0',
E(
x,
y)) →
xeqEdge(
E(
e11,
e12),
E(
e21,
e22)) →
eqEdge[Ite](
and(
!EQ(
e11,
e21),
!EQ(
e12,
e22)))
via(
u,
v,
Nil,
edges) →
NilnotEmpty(
Cons(
x,
xs)) →
TruenotEmpty(
Nil) →
Falsemember(
x,
Nil) →
Falsereach(
u,
v,
edges) →
reach[Ite](
member(
E(
u,
v),
edges),
u,
v,
edges)
goal(
u,
v,
edges) →
reach(
u,
v,
edges)
!EQ(
S(
x),
S(
y)) →
!EQ(
x,
y)
!EQ(
0',
S(
y)) →
False!EQ(
S(
x),
0') →
False!EQ(
0',
0') →
Trueand(
False,
False) →
Falseand(
True,
False) →
Falseand(
False,
True) →
Falseand(
True,
True) →
Truevia[Ite](
True,
u,
v,
Cons(
E(
x,
y),
xs),
edges) →
via[Let](
u,
v,
Cons(
E(
x,
y),
xs),
edges,
reach(
y,
v,
edges))
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Nil) →
via(
u,
v,
xs,
edges)
via[Let](
u,
v,
Cons(
x,
xs),
edges,
Cons(
x',
xs')) →
Cons(
x,
Cons(
x',
xs'))
via[Ite](
False,
u,
v,
Cons(
x,
xs),
edges) →
via(
u,
v,
xs,
edges)
member[Ite](
False,
x',
Cons(
x,
xs)) →
member(
x',
xs)
reach[Ite](
False,
u,
v,
edges) →
via(
u,
v,
edges,
edges)
reach[Ite](
True,
u,
v,
edges) →
Cons(
E(
u,
v),
Nil)
member[Ite](
True,
x,
xs) →
TrueeqEdge[Ite](
False) →
FalseeqEdge[Ite](
True) →
TrueTypes:
getNodeFromEdge :: S:0' → E → S:0'
S :: S:0' → S:0'
E :: S:0' → S:0' → E
via :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
Cons :: E → Cons:Nil → Cons:Nil
via[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil
!EQ :: S:0' → S:0' → True:False
0' :: S:0'
member :: E → Cons:Nil → True:False
member[Ite] :: True:False → E → Cons:Nil → True:False
eqEdge :: E → E → True:False
eqEdge[Ite] :: True:False → True:False
and :: True:False → True:False → True:False
Nil :: Cons:Nil
notEmpty :: Cons:Nil → True:False
True :: True:False
False :: True:False
reach :: S:0' → S:0' → Cons:Nil → Cons:Nil
reach[Ite] :: True:False → S:0' → S:0' → Cons:Nil → Cons:Nil
goal :: S:0' → S:0' → Cons:Nil → Cons:Nil
via[Let] :: S:0' → S:0' → Cons:Nil → Cons:Nil → Cons:Nil → Cons:Nil
hole_S:0'1_0 :: S:0'
hole_E2_0 :: E
hole_Cons:Nil3_0 :: Cons:Nil
hole_True:False4_0 :: True:False
gen_S:0'5_0 :: Nat → S:0'
gen_Cons:Nil6_0 :: Nat → Cons:Nil
Lemmas:
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) → False, rt ∈ Ω(0)
Generator Equations:
gen_S:0'5_0(0) ⇔ 0'
gen_S:0'5_0(+(x, 1)) ⇔ S(gen_S:0'5_0(x))
gen_Cons:Nil6_0(0) ⇔ Nil
gen_Cons:Nil6_0(+(x, 1)) ⇔ Cons(E(0', 0'), gen_Cons:Nil6_0(x))
No more defined symbols left to analyse.
(27) LowerBoundsProof (EQUIVALENT transformation)
The lowerbound Ω(1) was proven with the following lemma:
!EQ(gen_S:0'5_0(n8_0), gen_S:0'5_0(+(1, n8_0))) → False, rt ∈ Ω(0)
(28) BOUNDS(1, INF)